package com.jiashihui.schema_lgorithm.schema.prototype;

import java.io.IOException;

/**
 * @author jiashihui
 * @date 2019/03/14
 *
 * clone()方法满足：
 * (1) 对任何的对象x，都有x.clone() !=x，即克隆对象与原对象不是同一个对象。
 * (2) 对任何的对象x，都有x.clone().getClass()==x.getClass()，即克隆对象与原对象的类型一样。
 * (3) 如果对象x的equals()方法定义恰当，那么x.clone().equals(x)应该成立。
 */
public class PrototypeTest {
    public static void main(String[] args){
        DJIUAVPrototype prototype = new DJIUAVPrototype();
        prototype.setName("大疆1号");
        SerializableObject obj = new SerializableObject();
        obj.setName("XX-023");
        prototype.setObject(obj);
        // 浅拷贝
        DJIUAVPrototype prototype2 = null;
        try {
            prototype2 = (DJIUAVPrototype) prototype.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        // 深拷贝
        DJIUAVPrototype prototype3 = null;
        try {
            prototype3 = (DJIUAVPrototype) prototype.deepClone();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(prototype.toString());
        prototype.setName("大疆2号");
        prototype.getObject().setName("YY-023");
        System.out.println(prototype2.toString());
        System.out.println(prototype3.toString());

    }
}
